package com.zzy.product.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zzy.product.entity.AttrEntity;
import com.zzy.product.service.AttrService;
import com.zzy.product.vo.AttrGroupRelationVo;
import com.zzy.product.vo.AttrGroupWithAttrsVo;
import com.zzy.utils.utils.PageUtils;
import com.zzy.utils.utils.Query;
import com.zzy.product.mapper.AttrGroupMapper;
import com.zzy.product.entity.AttrGroupEntity;
import com.zzy.product.service.AttrGroupService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


@Service("attrGroupService")
public class AttrGroupServiceImpl extends ServiceImpl<AttrGroupMapper, AttrGroupEntity> implements AttrGroupService {
	
	@Autowired
	private AttrService attrService;
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<AttrGroupEntity> page = this.page(
                new Query<AttrGroupEntity>().getPage(params),
                new QueryWrapper<AttrGroupEntity>()
        );

        return new PageUtils(page);
    }
	
	@Override
	public PageUtils queryPage(Map<String, Object> params, Long catelogId) {
		/*select * from pms_attr_group where catelog_id=? and
								(attr_group_id=key or attr_group_name like %key%)*/
		/*多字段模糊匹配*/
		String key = (String) params.get("key");
		QueryWrapper<AttrGroupEntity> wrapper = new QueryWrapper<AttrGroupEntity>();
		if (!StringUtils.isEmpty(key)) {
			wrapper.and((obj) ->
					obj.eq("attr_group_id", key).or().like("attr_group_name", key));
		}
		if (catelogId == 0) {
			IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params),
					wrapper);
			return new PageUtils(page);
		} else {
			wrapper.eq("catelog_id", catelogId);
			IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params), wrapper);
			return new PageUtils(page);
		}
	}
	
	/**
	 * 根据分类id查出所有分组以及这些组里面的属性
	 * @param catelogId
	 * @return
	 */
	@Override
	public List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatelogId(Long catelogId) {
		/*1、查询分组信息*/
		List<AttrGroupEntity> attrGroupEntities = this.list(new QueryWrapper<AttrGroupEntity>()
				.eq("catelog_id", catelogId));
		/*2、查询所有属性*/
		List<AttrGroupWithAttrsVo> collect = attrGroupEntities.stream().map((group) -> {
			AttrGroupWithAttrsVo attrsVo = new AttrGroupWithAttrsVo();
			BeanUtils.copyProperties(group, attrsVo);
			List<AttrEntity> attrs = attrService.getRelationInfo(attrsVo.getAttrGroupId());
			attrsVo.setAttrs(attrs);
			return attrsVo;
		}).collect(Collectors.toList());
		return collect;
	}
	
}









